/*
 * Copyright (C) 2018 guomw.Inc. All rights reserved.
 * 项目名称： report-manage
 * 文件名称： JdbcService.java
 * Date：18-11-5 上午10:54
 * Author: guomw
 */

package com.guomw.report.service.service.upgrade;

import org.springframework.transaction.annotation.Transactional;

import java.io.IOException;
import java.sql.SQLException;

/**
 * @author guomw
 * @date 2018/9/11
 */
public interface JdbcService {
    @FunctionalInterface
    interface ConnectionConsumer {
        /**
         *
         * @param connection
         * @throws SQLException
         * @throws IOException
         */
        void workWithConnection(ConnectionProvider connection) throws SQLException, IOException;
    }


    /**
     * 执行一些jdbc操作.
     * <p>
     * tip:操作数据表比如create,drop,alert将直接提交事务.
     * </p>
     *
     * @param connectionConsumer 操作者
     * @throws SQLException,IOException
     */
    @Transactional
    void runJdbcWork(ConnectionConsumer connectionConsumer) throws SQLException, IOException;

    /**
     * 执行一些jdbc操作.
     * <p>
     * tip:操作数据表比如create,drop,alert将直接提交事务.
     * </p>
     * 跟{@link #runJdbcWork(ConnectionConsumer)}不同的是,该方法并没有声明使用事务,也就是它将依赖当前线程已开启的事务
     *
     * @param connectionConsumer 操作者
     * @throws SQLException,IOException
     */
    void runStandaloneJdbcWork(ConnectionConsumer connectionConsumer) throws SQLException, IOException;
}
